home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / lib / pm-utils / sleep.d / 99video < prev   
Text File  |  2008-10-15  |  5KB  |  174 lines

  1. #!/bin/sh
  2. #
  3. # Copyright 2006-2007 Richard Hughes <richard@hughsie.com>
  4. # Copyright 2007 Peter Jones <pjones@redhat.com>
  5. #
  6. # This program is free software; you can redistribute it and/or modify
  7. # it under the terms of version 2 of the GNU General Public License as
  8. # published by the Free Software Foundation.
  9.  
  10. # Handle video quirks.  If you are having suspend/resume issues,
  11. # troubleshooting using this hook is probably the best place to start.
  12. # If it weren't for video card quirks, suspend/resume on Linux would be 
  13. # a whole lot more stable.
  14.  
  15. . "${PM_FUNCTIONS}"
  16.  
  17. for opt in $PM_CMDLINE; do
  18.     case "${opt##--quirk-}" in # just quirks, please
  19.         dpms-on)        QUIRK_DPMS_ON="true" ;;
  20.         dpms-suspend)        QUIRK_DPMS_SUSPEND="true" ;;
  21.         radeon-off)        QUIRK_RADEON_OFF="true" ;;
  22.         reset-brightness)  QUIRK_RESET_BRIGHTNESS="true" ;;
  23.         s3-bios)        QUIRK_S3_BIOS="true" ;;
  24.         s3-mode)        QUIRK_S3_MODE="true" ;;
  25.         vbe-post)        QUIRK_VBE_POST="true" ;;
  26.         vbemode-restore)   QUIRK_VBEMODE_RESTORE="true" ;;
  27.         vbestate-restore)  QUIRK_VBESTATE_RESTORE="true" ;;
  28.         vga-mode3)        QUIRK_VGA_MODE_3="true" ;;
  29.         none)            QUIRK_NONE="true" ;;
  30.         *) continue ;;
  31.     esac
  32. done
  33.  
  34. reset_brightness()
  35. {
  36.     for bl in /sys/class/backlight/* ; do
  37.         [ -f "$bl/brightness" ] || continue
  38.         BR="$(cat $bl/brightness)"
  39.         echo 0 > "$bl/brightness"
  40.         echo "$BR" > "$bl/brightness"
  41.     done
  42. }
  43.  
  44. if command_exists vbetool; then
  45.     vbe() { vbetool "$@"; }
  46. else 
  47.     vbe() { echo "vbetool not installed!" 1>&2; return 1; }
  48. fi
  49.  
  50. if command_exists radeontool; then
  51.     radeon() { radeontool "$@"; }
  52. else 
  53.     radeon() { echo "radeontool not found" 1>&2; return 1; }
  54. fi
  55.  
  56. save_fbcon()
  57. {
  58.     local con
  59.     for con in /sys/class/graphics/*/state; do
  60.         [ -f $con ] || continue
  61.         echo 1 >"${con}"
  62.     done
  63. }
  64.  
  65. resume_fbcon()
  66. {
  67.     local con
  68.     for con in /sys/class/graphics/*/state; do
  69.         [ -f $con ] || continue
  70.         echo 0 >"${con}"
  71.     done
  72. }
  73.  
  74. # Some tiny helper functions for quirk handling
  75. quirk() { [ "$1" = "true" ] && [ -z $QUIRK_NONE ]; }
  76.  
  77. # save/restore vbe state
  78. vbe_savestate() { vbe vbestate save |savestate vbestate; }
  79. vbe_restorestate() { 
  80.     if [ -e /var/lib/acpi-support/vbestate ]; then
  81.         vbe vbestate restore < /var/lib/acpi-support/vbestate
  82.     else
  83.         restorestate vbestate |vbe vbestate restore
  84.     fi
  85. }
  86.  
  87. # save/restore the vbe mode
  88. vbe_savemode() { vbe vbemode get |savestate vbemode; }
  89. vbe_restoremode() 
  90. {
  91.     # this is a little mode complicated to handle special-casing mode 3.
  92.     local vbemode=$(restorestate vbemode)
  93.     if [ "$vbemode" = "3" ]; then
  94.         vbe vgamode set $vbemode
  95.     else 
  96.         vbe vbemode set $vbemode
  97.     fi
  98. }
  99.  
  100. # post the video card
  101. vbe_post() 
  102. {
  103.     local rom="/var/run/video.rom"
  104.     # if we do not have a romfile, do not post with it.
  105.     [ -f "$rom" ] || unset rom
  106.     vbe post $rom
  107.     sleep 0.1 
  108. }
  109.  
  110. # turn critical bits of radeon cards off/on
  111. radeon_off() { radeon dac off; radeon light off; }
  112. radeon_on() { radeon dac on; radeon light on; }
  113.  
  114. suspend_video()
  115. {
  116.     # 0=nothing, 1=s3_bios, 2=s3_mode, 3=both
  117.     local acpi_flag=0
  118.     quirk "${QUIRK_S3_BIOS}" &&         acpi_flag=$(($acpi_flag + 1))
  119.     quirk "${QUIRK_S3_MODE}" &&         acpi_flag=$(($acpi_flag + 2))
  120.     [ 0 -ne $acpi_flag ] && sysctl -w kernel.acpi_video_flags=$acpi_flag
  121.     
  122.     quirk "${QUIRK_VBESTATE_RESTORE}" &&     vbe_savestate
  123.     quirk "${QUIRK_VBEMODE_RESTORE}" &&     vbe_savemode
  124.     quirk "${QUIRK_RADEON_OFF}" &&         radeon_off
  125.     quirk "${QUIRK_VGA_MODE_3}" &&         vbe vbemode set 3
  126.     quirk "${QUIRK_DPMS_SUSPEND}" &&     vbe dpms suspend
  127.     save_fbcon # there should be a quirk, but HAL does not pass it.
  128. }
  129. resume_video()
  130. {
  131.     # We might need to do one or many of these quirks
  132.     quirk "${QUIRK_VBE_POST}" &&         vbe_post
  133.     quirk "${QUIRK_VBESTATE_RESTORE}" &&     vbe_restorestate
  134.     quirk "${QUIRK_VBEMODE_RESTORE}" &&     vbe_restoremode
  135.     resume_fbcon     # also should be handled by a quirk.
  136.     quirk "${QUIRK_RADEON_OFF}" &&         radeon_on
  137.     quirk "${QUIRK_DPMS_ON}" &&         vbe dpms on
  138.     quirk "${QUIRK_RESET_BRIGHTNESS}" &&     reset_brightness
  139.     return 0  # avoid spurious hook exit failure message.
  140. }
  141.  
  142. help() {
  143.     echo  # first echo makes it look nicer.
  144.     echo "Video quirk handler options:"
  145.     echo
  146.     echo "  --quirk-dpms-on"
  147.     echo "  --quirk-dpms-suspend"
  148.     echo "  --quirk-radeon-off"
  149.     echo "  --quirk-reset-brightness"
  150.     echo "  --quirk-s3-bios"
  151.     echo "  --quirk-s3-mode"
  152.     echo "  --quirk-vbe-post"
  153.     echo "  --quirk-vbemode-restore"
  154.     echo "  --quirk-vbestate-restore"
  155.     echo "  --quirk-vga-mode3"
  156.     echo "  --quirk-none"
  157. }
  158.  
  159. case "$1" in
  160.     suspend) suspend_video ;;
  161.     hibernate)
  162.         if [ "$HIBERNATE_RESUME_POST_VIDEO" = "yes" ]; then
  163.             suspend_video
  164.         fi
  165.         ;;
  166.     resume) resume_video ;;
  167.     thaw)
  168.         if [ "${HIBERNATE_RESUME_POST_VIDEO}" = "yes" ]; then
  169.             resume_video
  170.         fi
  171.         ;;
  172.     help) help ;;
  173. esac
  174.